package com.literaryfamily.literaryfamily.service.user;

import com.literaryfamily.literaryfamily.entity.Audit;
import com.literaryfamily.literaryfamily.entity.UserComplaints;
import com.literaryfamily.literaryfamily.model.ReturnResult;
import com.literaryfamily.literaryfamily.myUtil.PageUtil;

import java.math.BigDecimal;
import java.util.List;

/**
 * 用户举报
 * 所有涉及读写的方法都需要抛出 WriteError 数据库读写错误异常(这个是运行时异常,只需要抛出不需要处理)
 * 此接口所有方法均不检查用户身份,应该验证身份后在进行检查
 * @author 滑稽/因果报应
 */
public interface UserComplaintsService {
	/**
	 * 用户进行举报
	 * @param userComplaints 打包好的举报信息
	 * @return 审核状态
	 */
	Audit complaints(UserComplaints userComplaints);

	/**
	 * 反馈用户举报,根据情况发放奖励,发放奖励金时发送短信通知
	 * 推荐以体现单的形式发放,避免冗余
	 * @param usersId 举报的用户
	 * @param amount  奖励金(直接发放到用户余额)
	 * @param msg     反馈结果
	 * @param points  获得积分
	 * @return 处理结果
	 */
	ReturnResult<?> feedback(Long usersId, String msg, double points, BigDecimal amount);

	/**
	 * 撤回举报
	 * @param complaintId 举报ID
	 * @return 操作结果
	 */
	ReturnResult<?> cancelComplaint(Long complaintId);

	/**
	 * 举报历史记录查询
	 * @param userId 查询用户
	 *                  @param pageMsg 分页信息,为空时代表不进行分页,获取所有记录
	 * @return 查询结果
	 */
	List<UserComplaints> getComplaintsByUser(Long userId, PageUtil pageMsg);
}